package com.edu.springmvc.helloworld.config;

import com.edu.springmvc.helloworld.interceptor.MyHandlerInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/*
 * 1. 容器中需要有这样一个组件：WebMvcConfigurer
 * ① @Bean放一个WebMvcConfigurer
 * ② 配置类实现WebMvcConfigurer接口
 */

/**
 * SpringMVC内置拦截器机制，允许在请求被目标方法处理的前后进行拦截，执行一些额外的操作。
 * 比如：权限检验，日志记录，数据共享等
 * 使用步骤：
 * 1. 实现 HandlerInterceptor 接口的组件，即可成为拦截器。
 * 2. 创建 WebMvcConfigurer 组件，并配置拦截器的拦截路径
 * 3. 查看执行顺序结果：preHandler -> 目标方法 -> postHandle -> afterCompletion
 */
@Configuration // 配置类，专门对SpringMVC 底层进行配置
public class MySpringMVCConfig {
    @Autowired
    private MyHandlerInterceptor myHandlerInterceptor;

    @Bean
    WebMvcConfigurer webMvcConfigurer() {
        return new WebMvcConfigurer() {
            @Override
            public void addInterceptors(InterceptorRegistry registry) {
                registry.addInterceptor(myHandlerInterceptor)
                        .addPathPatterns("/**") // 拦截所有请求
                        .excludePathPatterns("/");
            }
        };
    }
}
